//////////////////////////
// Stimulus Information //
//////////////////////////
VVDD (VDD 0) vsource dc=pvdd
VVSS (VSS 0) vsource dc=0
VVSC (CLK 0) vsource dc=0

VVN0 (IN 0)  vsource type=pulse val0=0 val1=pvdd period=500m delay=0n

///////////////////////
// Top Level Circuit //
///////////////////////

I14 (n0 n1 n2 n3 n4 n5 n6 n7 n8 n9 nA nB nC nD CLK VDD VSS) clb

// Input & Output Load
B0 (IN tmp VDD VSS) inv
B1 (tmp n0 VDD VSS) inv
//C0 (nD VSS) capacitor c=28f

/////////////////////////
// Subcell Definitions //
/////////////////////////
// Cell name: clb
subckt clb D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 Qa Qb Qc Qd CLK VDD VSS
    I0  (D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 Qa Qb Qc Qd VSS VDD n0  VDD VSS) muxProg16_orig
    I1  (D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 Qa Qb Qc Qd VSS VDD n1  VDD VSS) muxProg16_orig
    I2  (D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 Qa Qb Qc Qd VSS VDD n2  VDD VSS) muxProg16_orig
    I3  (D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 Qa Qb Qc Qd VSS VDD n3  VDD VSS) muxProg16_orig
    I4  (D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 Qa Qb Qc Qd VSS VDD n4  VDD VSS) muxProg16_orig
    I5  (D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 Qa Qb Qc Qd VSS VDD n5  VDD VSS) muxProg16_orig
    I6  (D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 Qa Qb Qc Qd VSS VDD n6  VDD VSS) muxProg16_orig
    I7  (D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 Qa Qb Qc Qd VSS VDD n7  VDD VSS) muxProg16_orig
    I8  (D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 Qa Qb Qc Qd VSS VDD n8  VDD VSS) muxProg16_orig
    I9  (D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 Qa Qb Qc Qd VSS VDD n9  VDD VSS) muxProg16_orig
    I10 (D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 Qa Qb Qc Qd VSS VDD n10 VDD VSS) muxProg16_orig
    I11 (D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 Qa Qb Qc Qd VSS VDD n11 VDD VSS) muxProg16_orig
    I12 (D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 Qa Qb Qc Qd VSS VDD n12 VDD VSS) muxProg16_orig
    I13 (D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 Qa Qb Qc Qd VSS VDD n13 VDD VSS) muxProg16_orig
    I14 (D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 Qa Qb Qc Qd VSS VDD n14 VDD VSS) muxProg16_orig
    I15 (D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 Qa Qb Qc Qd VSS VDD n15 VDD VSS) muxProg16_orig
    I16 (n0 n1 n2 n3 n4 n5 n6 n7 n8 n9 n10 n11 n12 n13 n14 n15 Qa Qb Qc Qd CLK VDD VSS) cluster
ends clb

// Cell name: cluster
subckt cluster A0 A1 A2 A3 B0 B1 B2 B3 C0 C1 C2 C3 D0 D1 D2 D3 Qa Qb Qc Qd CLK VDD VSS
    I0 (CLK Qa A0 A1 A2 A3 VDD VSS SLP0 SLPB0) ble4
    I1 (CLK Qb B0 B1 B2 B3 VDD VSS SLP1 SLPB1) ble4
    I2 (CLK Qc C0 C1 C2 C3 VDD VSS SLP2 SLPB2) ble4
    I3 (CLK Qd D0 D1 D2 D3 VDD VSS SLP3 SLPB3) ble4
    I4 (VSS SLP0 SLPB0 VDD VSS VSS) BX_orig
    I5 (VSS SLP1 SLPB1 VDD VSS VSS) BX_orig
    I6 (VSS SLP2 SLPB2 VDD VSS VSS) BX_orig
    I7 (VSS SLP3 SLPB3 VDD VSS VSS) BX_orig
ends cluster

// Cell name: ble4
subckt ble4 CLK Q S0 S1 S2 S3 VDD VSS SLP SLPB 
    I0 (n0  S0 S1  S2  S3 VDD VSS SLP SLPB) lut4
    I1 (CLK n0 n1  VDD VSS SLP SLPB) dFF
    I2 (n0  n1 n2  VDD VSS SLP SLPB) muxProg2
    I3 (n2 Q VDD VSS SLP SLPB) buff
ends ble4

// Cell name: lut4
subckt lut4 Q S0 S1 S2 S3 VDD VSS SLP SLPB 
    I0 (n0a n1a n2a n3a n4a n5a n6a n7a n8a n9a n10a n11a n12a n13a n14a n15a VDD VSS SLP SLPB) reg16b
    I1 (n0a n1a n2a  n3a  n4a  n5a  n6a  n7a  n0q n1q n2q  n3q  n4q  n5q  n6q  n7q  VDD VSS SLP SLPB) buff8
    I2 (n8a n9a n10a n11a n12a n13a n14a n15a n8q n9q n10q n11q n12q n13q n14q n15q VDD VSS SLP SLPB) buff8
    I3 (n0q n1q n2q n3q n4q n5q n6q n7q n8q n9q n10q n11q n12q n13q n14q n15q Q S0 S1 S2 S3 VDD VSS SLP SLPB) mux16
ends lut4

// Cell name: dFF
subckt dFF CLK D Q VDD VSS SLP SLPB 
    inv (CLK CLKb VDD VSS SLP SLPB) inv1b1s
    dL0 (CLKb CLK  D  n0 VDD VSS SLP SLPB) dLatch
    dL1 (CLK  CLKb n0 Q  VDD VSS SLP SLPB) dLatch
ends dFF

// Cell name: dLatch
subckt dLatch CLK CLKb D Q VDD VSS SLP SLPB 
    inv0 (n0 Q  VDD VSS SLP SLPB) inv1b1s
    inv1 (Q  n1 VDD VSS SLP SLPB) inv1b1s
    tx0  (D  CLKb CLK  n0 VDD VSS) transGate
    tx1  (n1 CLK  CLKb n0 VDD VSS) transGate
ends dLatch

// Cell name: reg16b
subckt reg16b D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 D12 D13 D14 D15 VDD VSS SLP SLPB 
    r0  (VSS D0  n0  VDD VSS VSS SLP SLPB) BX
    r1  (VSS D1  n1  VDD VSS VSS SLP SLPB) BX
    r2  (VSS D2  n2  VDD VSS VSS SLP SLPB) BX
    r3  (VSS D3  n3  VDD VSS VSS SLP SLPB) BX
    r4  (VSS D4  n4  VDD VSS VSS SLP SLPB) BX
    r5  (VSS D5  n5  VDD VSS VSS SLP SLPB) BX
    r6  (VSS D6  n6  VDD VSS VSS SLP SLPB) BX
    r7  (VSS D7  n7  VDD VSS VSS SLP SLPB) BX
    r8  (VSS D8  n8  VDD VSS VSS SLP SLPB) BX
    r9  (VSS D9  n9  VDD VSS VSS SLP SLPB) BX
    r10 (VSS D10 n10 VDD VSS VSS SLP SLPB) BX
    r11 (VSS D11 n11 VDD VSS VSS SLP SLPB) BX
    r12 (VSS D12 n12 VDD VSS VSS SLP SLPB) BX
    r13 (VSS D13 n13 VDD VSS VSS SLP SLPB) BX
    r14 (VSS D14 n14 VDD VSS VSS SLP SLPB) BX
    r15 (VSS D15 n15 VDD VSS VSS SLP SLPB) BX
ends reg16b

// Cell name: mux2
subckt mux2 A B Q S Sb VDD VSS
    I0 (B S  Sb Q VDD VSS) transGate
    I1 (A Sb S  Q VDD VSS) transGate
ends mux2

// Cell name: mux4
subckt mux4 D0 D1 D2 D3 Q S0 S0b S1 S1b VDD VSS
    I0 (D2 D3 n0 S0 S0b VDD VSS) mux2
    I1 (D0 D1 n1 S0 S0b VDD VSS) mux2
    I2 (n1 n0 Q  S1 S1b VDD VSS) mux2
ends mux4

// Cell name: mux8
subckt mux8 D0 D1 D2 D3 D4 D5 D6 D7 Q S0 S0b S1 S1b S2 S2b VDD VSS
    I0 (D0 D1 D2 D3 n0 S0 S0b S1 S1b VDD VSS) mux4
    I1 (D4 D5 D6 D7 n1 S0 S0b S1 S1b VDD VSS) mux4
    I2 (n0 n1 Q S2 S2b VDD VSS) mux2
ends mux8

// Cell name: mux16
subckt mux16 D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 D12 D13 D14 D15 Q S0 S1 S2 S3 VDD VSS SLP SLPB 
    I0 (S0 s0b VDD VSS SLP SLPB) inv1b1s
    I1 (S1 s1b VDD VSS SLP SLPB) inv1b1s
    I2 (S2 s2b VDD VSS SLP SLPB) inv1b1s
    I3 (S3 s3b VDD VSS SLP SLPB) inv1b1s
    I4 (D0 D1  D2  D3  D4  D5  D6  D7  n0 S0 s0b S1 s1b S2 s2b VDD VSS) mux8
    I5 (D8 D9  D10 D11 D12 D13 D14 D15 n1 S0 s0b S1 s1b S2 s2b VDD VSS) mux8
    I6 (n0 n1  Q   S3  s3b VDD VSS) mux2
ends mux16

// Cell name: transGateProg
subckt transGateProg A Q VDD VSS SLP SLPB 
    I0 (VSS n0 n1 VDD VSS VSS SLP SLPB) BX
    I1 (A n0 n1 Q VDD VSS) transGate
ends transGateProg

// Cell name: transGateProg_orig
subckt transGateProg_orig A Q VDD VSS
    I0 (VSS n0 n1 VDD VSS VSS) BX_orig
    I1 (A n0 n1 Q VDD VSS) transGate
ends transGateProg_orig

// Cell name: muxProg2
subckt muxProg2 A B Q VDD VSS SLP SLPB 
    I0 (A Q VDD VSS SLP SLPB) transGateProg
    I1 (B Q VDD VSS SLP SLPB) transGateProg
ends muxProg2

// Cell name: muxProg16_orig
subckt muxProg16_orig D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 D12 D13 D14 D15 Q VDD VSS 
    I0  (D0  Q VDD VSS) transGateProg_orig
    I1  (D1  Q VDD VSS) transGateProg_orig
    I2  (D2  Q VDD VSS) transGateProg_orig
    I3  (D3  Q VDD VSS) transGateProg_orig
    I4  (D4  Q VDD VSS) transGateProg_orig
    I5  (D5  Q VDD VSS) transGateProg_orig
    I6  (D6  Q VDD VSS) transGateProg_orig
    I7  (D7  Q VDD VSS) transGateProg_orig
    I8  (D8  Q VDD VSS) transGateProg_orig
    I9  (D9  Q VDD VSS) transGateProg_orig
    I10 (D10 Q VDD VSS) transGateProg_orig
    I11 (D11 Q VDD VSS) transGateProg_orig
    I12 (D12 Q VDD VSS) transGateProg_orig
    I13 (D13 Q VDD VSS) transGateProg_orig
    I14 (D14 Q VDD VSS) transGateProg_orig
    I15 (D15 Q VDD VSS) transGateProg_orig
ends muxProg16_orig

// Cell name: BX
subckt BX BL Q QB VDD VSS WL SLP SLPB 
    M0 (QB  Q  VDD VDD) pfet w=180n l=90n vthm=2 // phvt w=0.2 l=0.1 nfing=1 mult=1 srcefirst=1 mismatch=1
    M1 (QB  Q  VSS VSS) nfet w=180n l=90n vthm=2 // nhvt w=0.2 l=0.1 nfing=1 mult=1 srcefirst=1 mismatch=1
    M2 (VDD QB Q   VDD) pfet w=180n l=90n vthm=2 // phvt w=0.2 l=0.1 nfing=1 mult=1 srcefirst=1 mismatch=1
    M3 (VSS QB Q   VSS) nfet w=180n l=90n vthm=2 // nhvt w=0.2 l=0.1 nfing=1 mult=1 srcefirst=1 mismatch=1
    M4 (BL  WL QB  VSS) nfet w=180n l=90n vthm=2 // nhvt w=0.2 l=0.1 nfing=1 mult=1 srcefirst=1 mismatch=1
ends BX

// Cell name: BX_orig
subckt BX_orig BL Q QB VDD VSS WL
    M0 (QB  Q  VDD VDD) pfet w=180n l=90n vthm=2 // phvt w=0.2 l=0.1 nfing=1 mult=1 srcefirst=1 mismatch=1
    M1 (QB  Q  VSS VSS) nfet w=180n l=90n vthm=2 // nhvt w=0.2 l=0.1 nfing=1 mult=1 srcefirst=1 mismatch=1
    M2 (VDD QB Q   VDD) pfet w=180n l=90n vthm=2 // phvt w=0.2 l=0.1 nfing=1 mult=1 srcefirst=1 mismatch=1
    M3 (VSS QB Q   VSS) nfet w=180n l=90n vthm=2 // nhvt w=0.2 l=0.1 nfing=1 mult=1 srcefirst=1 mismatch=1
    M4 (BL  WL QB  VSS) nfet w=180n l=90n vthm=2 // nhvt w=0.2 l=0.1 nfing=1 mult=1 srcefirst=1 mismatch=1
ends BX_orig

// Cell name: inv1b1s
subckt inv1b1s A Q VDD VSS SLP SLPB 
    M3 (vVDD SLP  VDD  VDD) pfet w=360n l=90n vthm=1.2
    M0 (Q    A    vVDD VDD) pfet w=360n l=90n // psvt w=0.4 l=0.1 nfing=1 mult=1 srcefirst=1 mismatch=1
    M1 (Q    A    vVSS VSS) nfet w=180n l=90n // nsvt w=0.2 l=0.1 nfing=1 mult=1 srcefirst=1 mismatch=1
    M2 (vVSS SLPB VSS  VSS) nfet w=180n l=90n vthm=1.2
ends inv1b1s

// Cell name: inv
subckt inv A Q VDD VSS 
    M0 (Q A VDD VDD) pfet w=360n l=90n // psvt w=0.4 l=0.1 nfing=1 mult=1 srcefirst=1 mismatch=1
    M1 (Q A VSS VSS) nfet w=180n l=90n // nsvt w=0.2 l=0.1 nfing=1 mult=1 srcefirst=1 mismatch=1
ends inv

// Cell name: buff8
subckt buff8 D0 D1 D2 D3 D4 D5 D6 D7 Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 VDD VSS SLP SLPB 
    I0 (D0 Q0 VDD VSS SLP SLPB) buff
    I1 (D1 Q1 VDD VSS SLP SLPB) buff
    I2 (D3 Q3 VDD VSS SLP SLPB) buff
    I3 (D2 Q2 VDD VSS SLP SLPB) buff
    I4 (D6 Q6 VDD VSS SLP SLPB) buff
    I5 (D7 Q7 VDD VSS SLP SLPB) buff
    I6 (D5 Q5 VDD VSS SLP SLPB) buff
    I7 (D4 Q4 VDD VSS SLP SLPB) buff
ends buff8

// Cell name: transGate
subckt transGate A EN ENb Q VDD VSS
    M0 (A ENb Q VDD) pfet w=180n l=90n // psvt w=0.2 l=0.1 nfing=1 mult=1 srcefirst=1 mismatch=1
    M1 (A EN  Q VSS) nfet w=180n l=90n // nsvt w=0.2 l=0.1 nfing=1 mult=1 srcefirst=1 mismatch=1
ends transGate

// Cell name: buff
subckt buff A Q VDD VSS SLP SLPB 
    I0 (A  n0 VDD VSS SLP SLPB) inv1b1s
    I1 (n0 Q  VDD VSS SLP SLPB) inv1b1s
ends buff
